package com.dc.commons.views;


import java.util.Map;
import java.util.Set;

import org.springframework.util.CollectionUtils;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;

import com.dc.commons.json.JsonWrapper;

/**
 * *****************************************************************************
 * 文件名: JsonView.java <br>
 * 版本: 1.0<br>
 * 描述: Json 视图  从整体上剔除一些字段，在Json中将结果集放到JsonWrapper<br>
 * 版权所有: <br>
 * <P>
 * 创建者: 王建栋 <br>
 * 创建日期: 2015年12月16日 上午11:54:16<br>
 * 修改者: <br>
 * 修改日期: <br>
 * 修改说明: <br>
 *****************************************************************************
 */
public class JsonView extends MappingJackson2JsonView{

	/**
	 * 剔除的键值
	 */
	private Set<String> excludeKeys;
	
	/**
	 * 构造方法，默认 当只有一个对象的时候将外层的map去掉
	 */
	public JsonView(){
		//设置这个的时候，当传输对象只有一个的时候将包装map去掉
		this.setExtractValueFromSingleKeyModel(true);
	}
	
	/**
	 * 过滤，将剔除的对象去掉，如果有json对象，有结果对象，将结果对象移动到json对象中
	 */
	@Override
	protected Object filterModel(Map<String, Object> model){
		if(!CollectionUtils.isEmpty(excludeKeys)){
			for(String key:excludeKeys){
				if(model.keySet().contains(key)){
					model.remove(key);
				}
			}
		}
		//对Json 进行处理
		if(model.containsKey(ModelAndViewBuilder.jsonKey)&&model.containsKey(ModelAndViewBuilder.resultKey)){
			JsonWrapper dcJson=(JsonWrapper)model.get(ModelAndViewBuilder.jsonKey);
			if(dcJson!=null){
				dcJson.setResult(model.get(ModelAndViewBuilder.resultKey));
				model.put(ModelAndViewBuilder.resultKey, dcJson);
				model.remove(ModelAndViewBuilder.jsonKey);
			}
		}
		return super.filterModel(model);
	}

	/**
	 * 设置剔除键值
	 * @param excludeKeys
	 */
	public void setExcludeKeys(Set<String> excludeKeys) {
		this.excludeKeys = excludeKeys;
	}
	
	
}
